Vwins2.0 SQL注入漏洞分析
0x01 漏洞利用条件
后台管理员开放注册
0x02 漏洞利用
注入点在用户名处
我们构造payload:flight' and extractvalue(1,(select user()))#
可以看到我们成功执行了payload,因为前端有跳转,所以我们使用burp抓包来进行攻击
0x02 漏洞分析
Vwins2.0是用CI框架搭建的,在入口文件处有着全局的过滤函数,在include config.php的时候也同时include了全局过滤类safe.php
我们看一下safe.php中的过滤
可以看到过滤了很多函数,但是好像报错函数并没有被过滤
在_construct
函数中调用了本类的init()方法,我们看一下都对哪里传来的参数进行了过滤
对来自GET,POST,COOKIE,referer的信息进行了过滤
本次注入漏洞的利用点在注册用户处,因为全局过滤函数的并没有考虑到报错注入的问题,导致了漏洞的发生
根据路由我们可以定位到进行注册的函数
函数获取到post传入的username(注意:username在最开始就已经被过滤一次了,而且还过滤了一次xss,但是不影响sql执行),将其存在$_arr['username']
中,我们继续跟踪username,发现在117行调用了了ddb的get_total方法,跟踪这个方法
发现在94行进行了sql的拼接,进入where_preg
最后拼接后的sql语句为:SELECT COUNT(*) AS num FROM es_users WHERE 'username' = 'flight'
因为union select被过滤,我们可以使用extractvalue来报错注入,即可构造payload:flight' and extractvalue(1,(select user()))#